home *** CD-ROM | disk | FTP | other *** search
/ Singles Flirt Up Your Life! (German) / Singles Flirt Up Your Life.iso / data1.cab / Statemachine / eatByTableChar.lua < prev    next >
Text File  |  2004-01-29  |  14KB  |  465 lines

  1. beginStateMachine()
  2.     
  3.     onEnter(function(msg)
  4.         print("EatByTable onEnter------------------------------");
  5.     end )
  6.     
  7.     onExit(function(msg)
  8.         print("EatByTable onExit--------------------------------");
  9. --        local chair = retrieveStateObject("chair");
  10. --        if (chair) then
  11. --            getParent().unlockActionPoints(chair);
  12. --            getParent().stopAllActivities(chair);
  13. --            removeStateObject("chair");
  14. --        end;
  15. --        
  16. --        local table = retrieveStateObject("table");
  17. --        if (table) then
  18. --            getParent().unlockActionPoints(table);
  19. --            getParent().stopAllActivities(table);
  20. --            removeStateObject("table");
  21. --        end;
  22.         
  23.         unlockAll("chair");        
  24.         unlockAll("table");
  25.         
  26.         local partner = retrieveStateObject("partner");
  27.         if (partner) then
  28.             getParent().unlockActionPoints(partner);
  29.             getParent().stopAllActivities(partner);
  30.             removeStateObject("partner");
  31.         end;
  32.         
  33.     end )
  34.         
  35.     
  36.     -- sit down on chair
  37.     state("sitDown")
  38.     
  39.         onEnter(function(msg)
  40.         
  41.         
  42.             print("sitDown onEnter");
  43.             local chair = retrieveStateObject("chair");
  44.             
  45.             if (chair) then
  46.                 --chair does exist
  47.                 if (getParent().isOneActionPointLocked(chair)) then
  48.                     -- action point is locked
  49.                     getParent().setEmoticon(EMOTICON_CANNOT, EMOTICON_DELAY);
  50.                     sendMsg("emoThink", getParent().walkSO);
  51.                     exitAndGoAway();
  52.                     return
  53.                 else
  54.                     getParent().lockActionPoints(chair);
  55.                     -- check wich side of chair
  56.                     local actionPointName = retrieveData("chairActionPointName");
  57.                     print("Eat by table actionPointName" .. actionPointName);
  58.     
  59.                      if (actionPointName == "sit2") then
  60.                         storeData("mirrorAnims", true);
  61.                     else
  62.                         storeData("mirrorAnims", false);
  63.                     end
  64.                     
  65.                 end
  66.             else
  67.                 -- chair does not exist anymore
  68.                 print("no chair");
  69.                 getParent().setEmoticon(EMOTICON_NOSEAT, EMOTICON_DELAY);
  70.                 sendMsg("emoThink", getParent().walkSO);
  71.                 exitAndGoAway();
  72.                 return
  73.             end
  74.         
  75.         
  76.                     
  77.             
  78.             -- tablet can be a pizza box too
  79.             local tablet = getParent().getLeftHeldObject();
  80.             if (not tablet) then
  81.                 print("no tablet");
  82.                 freeHands(getParent());
  83.                 exitAndGoAway();
  84.                 return
  85.             end;
  86.             
  87.             getParent().detachLeftObjectHolder();
  88.             getParent().handSO.stopPose();
  89.             
  90.             local tableVer = getTableVersion(tablet);
  91.             if (tableVer ~= tablet) then tablet.deleteGameObject(); end;
  92.             tablet = tableVer;
  93.             
  94.             if (not tablet) then
  95.                 print("no table tablet");
  96.                 exitAndGoAway();
  97.                 return
  98.             end;
  99.             
  100.             
  101.             tablet.buy(); -- pay money for food
  102.  
  103.             storeStateObject("tablet", tablet);
  104.             
  105.             
  106.             local table = retrieveStateObject("table");
  107.             local tableActionPointName = retrieveData("tableActionPointName");
  108.             local tableHeight = table.getTableHeight();
  109.             local tablePos = tablet.tableYPosition;
  110.             if (not tablePos) then print("WARNING no attribute -tableYPosition- found"); tablePos = 0; end;
  111.             table.addObjectToActionPoint(tablet, tableActionPointName, 0, tablePos, tableHeight);
  112.             
  113.  
  114.  
  115.             setPose("sitdownChair", retrieveData("mirrorAnims"));
  116.             --print("sitDown onEnter mirrorAnims" .. retrieveData("mirrorAnims"));
  117.                                     
  118.             chair.startAnimation("ChairSitdown");
  119.             chair.playSound("Stuhl hinsetzen");
  120.             -- send a delayed message for sit sound
  121.             sendDelayedMsgThis("sitSound", 2500);
  122.  
  123.                         
  124.         end )
  125.         
  126. --        
  127.     
  128.         onMsg("end", function(msg)
  129.             setCurrentPosition();
  130.             if testCancel() then
  131.                 setState("standUp");
  132.             else
  133.                 setState("eatSitting");
  134.             end
  135.         end )    
  136.     
  137.         onMsg("queue", function(msg)
  138.             setState("standUp");
  139.         end )        
  140.     
  141.         onMsg("sitSound", function(msg)
  142.             local chair = retrieveStateObject("chair");
  143.             --chair.playSound("Stuhl setzen");
  144.             makeChairSound(chair, "Down");
  145.         end )    
  146.         
  147.         onMsg("act", function(msg)
  148.             doSomething();
  149.             sendDelayedMsgThis("act", 5000);
  150.         end )
  151.         
  152.         
  153.         
  154.         
  155.     -- eat sitting on chair
  156.     state("eatSitting")
  157.     
  158.         onEnter(function(msg)
  159.             print("eatSitting onEnter");
  160.             
  161.             
  162.             local tablet = retrieveStateObject("tablet");
  163.             --local eat = getParent().startActivity("eat", tablet);
  164.             local eat = getParent().startActivity(getEatActivityName(tablet), tablet);
  165.             local length = getActivityLength(eat);
  166.             print("eatSitting onEnter started " .. getEatActivityName(tablet) .. " on ".. tablet.getType() .." for " .. length);
  167.  
  168.             local chair = retrieveStateObject("chair");
  169.             getParent().startActivity("sit", chair);
  170.             
  171.             -- doesnt work because of a bug. objects are not deleted if tablet is.
  172. --            local fork = tablet.createGameObject("fork");
  173. --            local knife = tablet.createGameObject("knife");
  174. --            local glass = tablet.createGameObject("glass");
  175.  
  176.             local glassName = cond(tablet.glass, tablet.glass, "glass")
  177.             storeData("glassName", glassName);
  178.  
  179.             -- create hand objects
  180.             local fork = getParent().loadGameObject("StandardGO","fork");
  181.             local knife = getParent().loadGameObject("StandardGO","knife");
  182.             local glass = getParent().loadGameObject("StandardGO", glassName);
  183.  
  184.             storeStateObject("fork", fork);
  185.             storeStateObject("knife", knife);
  186.             storeStateObject("glass", glass);
  187.             
  188.             fork.setVisibility(false);
  189.             knife.setVisibility(false);
  190.             glass.setVisibility(false);
  191.             
  192.             
  193. --            fork.setMeshVisibility("fork", false);
  194. --            knife.setMeshVisibility("knife", false);
  195. --            glass.setMeshVisibility("glass", false);
  196.             
  197. --            getParent().attachLeftObjectHolder(fork);
  198. --            getParent().attachRightObjectHolder(knife);
  199. --            getParent().attachRightObjectHolder(glass);
  200.             
  201.             
  202.  
  203.             sendDelayedMsgThis("lookForPartner", 1200);
  204.             sendDelayedMsgThis("testCancel", CANCEL_POLLING_INTERVAL);
  205.             sendDelayedMsgThis("testComplete", length);
  206.             
  207.             sendMsgThis("startLoop");
  208.             
  209.             local buttonText = tablet.buttonText;
  210.             if (not buttonText) then buttonText = "pm_eat"; end;
  211.             setTopQueueEntry(getParent(), buttonText)
  212.             
  213.         end )
  214.         
  215.         
  216.         onExit(function(msg)
  217.         
  218.             print("eatSitting onExit");
  219.             
  220.             local table = retrieveStateObject("table");
  221.             dirtify(table, DIRTIFY_PER_TABLE_EAT);
  222.             
  223.             partner = retrieveStateObject("partner");
  224.             if (partner) then
  225.                 print("eatSitting onExit: getParent().stopAllActivities(partner)");
  226.                 getParent().stopAllActivities(partner);
  227.                 removeStateObject("partner");
  228.             end
  229.             
  230.         end )
  231.         
  232.         
  233.         
  234.         
  235.         onMsg("startLoop", function(msg)
  236.             startAnimation("eatSitting", false);
  237.                         
  238.             sendDelayedMsgThis("grabFork", 1200);
  239.             sendDelayedMsgThis("grabKnife", 1200);
  240.             sendDelayedMsgThis("eatSound", 3500);
  241.             sendDelayedMsgThis("dropFork", 8000);
  242.             sendDelayedMsgThis("dropKnife", 8000);
  243.             sendDelayedMsgThis("eatSound", 7000);
  244.             sendDelayedMsgThis("grabGlass", 9400);
  245.             sendDelayedMsgThis("drinkSound", 10500);
  246.             sendDelayedMsgThis("dropGlass", 12200);
  247.         end )
  248.         
  249.         onMsg("eatSound", function(msg)
  250.             getParent().playSound("eat2");
  251.         end )
  252.         
  253.         onMsg("drinkSound", function(msg)
  254.             getParent().playSound(genderizeReal(getParent(), "drink"));
  255.         end )
  256.         
  257.         onMsg("grabFork", function(msg)
  258.             -- show hand fork
  259.             local fork = retrieveStateObject("fork");
  260.             fork.setVisibility(true);
  261.             --fork.setMeshVisibility("fork", true);
  262.             --fork.setEnable(true, false);
  263.             getParent().attachLeftObjectHolder(fork);
  264.             -- hide tablet fork
  265.             local tablet = retrieveStateObject("tablet");
  266.             if (tablet) then tablet.setChildEnable("fork", false); end;
  267.         end )
  268.         
  269.         onMsg("grabKnife", function(msg)
  270.             -- show hand knife
  271.             local knife = retrieveStateObject("knife");
  272.             knife.setVisibility(true);
  273.             --knife.setMeshVisibility("knife", true);
  274.             --knife.setEnable(true, false);
  275.             getParent().attachRightObjectHolder(knife);
  276.             -- hide tablet knife
  277.             local tablet = retrieveStateObject("tablet");
  278.             if (tablet) then tablet.setChildEnable("knife", false); end;
  279.         end )
  280.         
  281.         onMsg("grabGlass", function(msg)
  282.             -- show hand glass
  283.             local glass = retrieveStateObject("glass");
  284.             glass.setVisibility(true);
  285.             --glass.setMeshVisibility("glass", true);
  286.             --glass.setEnable(true, false);
  287.             getParent().attachRightObjectHolder(glass);
  288.             -- hide tablet glass
  289.             local tablet = retrieveStateObject("tablet");
  290.             if (tablet) then tablet.setChildEnable("glass", false); end;
  291.         end )
  292.         
  293.         onMsg("dropFork", function(msg)
  294.             -- hide hand fork
  295.             local fork = retrieveStateObject("fork");
  296.             fork.setVisibility(false);
  297.             --fork.setMeshVisibility("fork", false);
  298.             --fork.setEnable(false, false);
  299.             getParent().detachLeftObjectHolder();
  300.             -- show tablet fork
  301.             local tablet = retrieveStateObject("tablet");
  302.             if (tablet) then tablet.setChildEnable("fork", true); end;
  303.         end )    
  304.         
  305.         onMsg("dropKnife", function(msg)
  306.             -- hide hand knife
  307.             local knife = retrieveStateObject("knife");
  308.             knife.setVisibility(false);
  309.             --knife.setMeshVisibility("knife", false);                
  310.             --knife.setEnable(false, false);
  311.             getParent().detachRightObjectHolder();
  312.             -- show tablet knife
  313.             local tablet = retrieveStateObject("tablet");
  314.             if (tablet) then tablet.setChildEnable("knife", true); end;
  315.         end )
  316.  
  317.         onMsg("dropGlass", function(msg)
  318.             -- hide hand glass
  319.             local glass = retrieveStateObject("glass");
  320.             glass.setVisibility(false);
  321.             --glass.setMeshVisibility("glass", false);                
  322.             --glass.setEnable(false, false);
  323.             getParent().detachRightObjectHolder();
  324.             -- show tablet glass
  325.             local tablet = retrieveStateObject("tablet");
  326.             if (tablet) then tablet.setChildEnable("glass", true); end;            
  327.         end )
  328.  
  329.         onMsg("lookForPartner", function(msg)
  330.  
  331.             local partner = getTableTalkPartner();
  332.             if (not partner) then
  333.                 print("lookForPartner: no partner found");
  334.                 partner = retrieveStateObject("partner");
  335.                 if (partner) then
  336.                     print("lookForPartner: getParent().stopAllActivities(partner)");
  337.                     getParent().stopAllActivities(partner);
  338.                     removeStateObject("partner");
  339.                 end
  340.                 sendDelayedMsgThis("lookForPartner", 1000);
  341.                 return
  342.             end
  343.             storeStateObject("partner", partner);
  344.             
  345.             if (getParent().hasActivityName("eatSupper") and partner.hasActivityName("eatSupper")) then
  346.                 if (not getParent().hasActivityName("eatTogether")) then
  347.                     -- start activity "eat together
  348.                     local eatTogether = getParent().startActivity("eatTogether", partner);
  349.                 end
  350.             end
  351.             
  352.             local table = retrieveStateObject("table");
  353.             if (getParent().hasActivityName("eatDinner") and partner.hasActivityName("eatDinner") and hasLightenCandles(table)) then
  354.                 print("start candlelightDinner " .. getParent().getCharacterName() .. " -> " .. partner.getCharacterName());
  355.                 local candlelightDinner = getParent().startActivity("candlelightDinner", partner);
  356.                 local length = getActivityLength(candlelightDinner);
  357.                 print("start candlelightDinner " .. getParent().getCharacterName() .. " -> " .. partner.getCharacterName() .. " for " .. length);
  358.                 sendDelayedMsgThis("complete", length);
  359.             end
  360.             
  361.             sendDelayedMsg("talk", getParent().mimicSO, random(0,9000));
  362.             sendDelayedMsgThis("lookForPartner", 13000);
  363.             
  364.         end )
  365.         
  366.         onMsg("testCancel", function(msg)
  367.             if testCancel() or (not this.getParent().getCurrentActivityGain()) then
  368.                 sendMsgThis("complete");
  369.             else
  370.                 sendDelayedMsgThis("testCancel", CANCEL_POLLING_INTERVAL);
  371.             end
  372.         end )
  373.         
  374.         onMsg("testComplete", function(msg)
  375.             if (getParent().hasActivityName("candlelightDinner")) then
  376.                 sendDelayedMsgThis("testComplete", CANCEL_POLLING_INTERVAL);
  377.             else
  378.                 sendMsgThis("complete");
  379.             end
  380.         end )
  381.         
  382.         
  383.         onMsg("complete", function(msg)
  384.             
  385.             getParent().detachLeftObjectHolder();
  386.             getParent().detachRightObjectHolder();
  387.             
  388.             local fork = retrieveStateObject("fork");
  389.             if (fork) then fork.deleteGameObject(); removeStateObject("fork"); end;
  390.             
  391.             local knife = retrieveStateObject("knife");
  392.             if (knife) then knife.deleteGameObject(); removeStateObject("knife");  end;
  393.             
  394.             local glass = retrieveStateObject("glass");
  395.             if (glass) then glass.deleteGameObject(); removeStateObject("glass");  end;
  396.                     
  397.             setState("standUp");
  398.         end )
  399.         
  400.  
  401.         onMsg("end", function(msg)
  402. --            if (testCancel() or (getParent().getCondition(NEED_HUNGER) > 0.99)) then
  403.             if testCancel() or (not this.getParent().getCurrentActivityGain()) then
  404.                 sendMsgThis("complete");
  405.             else
  406.                 sendMsgThis("startLoop");            
  407.             end
  408.         end )    
  409.         
  410.                 
  411.     -- stand up from chair
  412.     state("standUp")
  413.     
  414.         onEnter(function(msg)
  415.         
  416.             print("standUp::onEnter");
  417.             
  418.             
  419.             
  420.             local tablet = retrieveStateObject("tablet");
  421.             local plate = getDirtyDishVersion(tablet);
  422.             if (tablet) then 
  423.                 getParent().stopAllActivities(tablet);
  424.                 tablet.deleteGameObject();
  425.             end;
  426.             
  427.             
  428.             -- place dirty plate on table
  429.             --local plate = getParent().loadGameObject("StandardGO","plate");
  430.             
  431.             
  432.             local table = retrieveStateObject("table");
  433.             local actionPointName = retrieveData("tableActionPointName");
  434.             plate.storeData("placeActionPointName", actionPointName);
  435.             local tableHeight = table.getTableHeight();
  436.             local tablePos = plate.tableYPosition;
  437.             if (not tablePos) then print("WARNING no attribute -tableYPosition- found"); tablePos = 0; end;
  438.             
  439.             table.addObjectToActionPoint(plate, actionPointName, 0, tablePos, tableHeight);
  440.             
  441.             
  442.         
  443.             startAnimation("standupChair", retrieveData("mirrorAnims"));
  444.                             
  445.             sendDelayedMsgThis("upSound", 900);
  446.  
  447.             
  448.             local chair = retrieveStateObject("chair");
  449.             chair.startAnimation("ChairSitdown", -1);
  450.             getParent().stopAllActivities(chair);
  451.             
  452.         end )
  453.     
  454.         
  455.         onMsg("upSound", function(msg)
  456.             local chair = retrieveStateObject("chair");
  457.             makeChairSound(chair, "Up");
  458.         end )    
  459.     
  460.         onMsg("end", function(msg)
  461.             setCurrentPosition();
  462.             exitAndGoAway();
  463.         end )    
  464.     
  465. endStateMachine()